import pandas as pd
import os
import logging

# 配置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

# 文件路径
HISTORY_EXCEL_FILE = os.path.join('..', '瀚越已发货包装数据总表.xlsx')
FORMATTED_CSV_FILE = 'test_results/processed_data/1_2_历史包装数据_格式化.csv'

# 读取原始Excel文件
def compare_history_data():
    try:
        print("=== 历史数据对比分析 ===")
        
        # 读取原始Excel数据
        if os.path.exists(HISTORY_EXCEL_FILE):
            original_df = pd.read_excel(HISTORY_EXCEL_FILE)
            print(f"原始Excel数据行数: {len(original_df)}")
        else:
            print(f"原始Excel文件不存在: {HISTORY_EXCEL_FILE}")
            return
        
        # 读取格式化后的CSV数据
        if os.path.exists(FORMATTED_CSV_FILE):
            formatted_df = pd.read_csv(FORMATTED_CSV_FILE)
            print(f"格式化后CSV数据行数: {len(formatted_df)}")
            print(f"数据减少行数: {len(original_df) - len(formatted_df)}")
        else:
            print(f"格式化后的CSV文件不存在: {FORMATTED_CSV_FILE}")
            return
        
        # 模拟数据格式化过程，分析可能的数据丢失原因
        print("\n=== 数据丢失可能原因分析 ===")
        
        # 1. 检查重复行
        initial_rows = len(original_df)
        deduped_df = original_df.drop_duplicates()
        duplicate_rows = initial_rows - len(deduped_df)
        print(f"1. 重复行数量: {duplicate_rows}")
        
        # 2. 检查可能的列转换问题
        # 复制一份进行模拟格式化
        sim_df = original_df.copy()
        
        # 转换数据类型可能会导致的问题
        if '数量' in sim_df.columns:
            try:
                # 尝试转换为数字，看看有多少行失败
                num_errors = pd.to_numeric(sim_df['数量'], errors='coerce').isna().sum()
                print(f"2. 数量列无法转换为数字的行数: {num_errors}")
            except:
                print("2. 数量列转换分析失败")
        
        if '预完工日期' in sim_df.columns:
            try:
                # 尝试转换为日期，看看有多少行失败
                date_errors = pd.to_datetime(sim_df['预完工日期'], errors='coerce').isna().sum()
                print(f"3. 预完工日期列无法转换为日期的行数: {date_errors}")
            except:
                print("3. 预完工日期列转换分析失败")
        
        print("\n=== 总结 ===")
        print("历史数据格式化后减少的主要原因:")
        print("1. 重复行被删除 (使用drop_duplicates()方法删除完全相同的行)")
        print("2. 数据清理过程中，相同规格型号和数量的包装方案只保留日期最晚的一个")
        print("3. 数据类型转换可能导致部分数据被过滤或转换")
        print("4. 空值处理和数据标准化过程中的变化")
        
    except Exception as e:
        logger.error(f"分析过程中出错: {str(e)}")
        print(f"分析过程中出错: {str(e)}")

if __name__ == "__main__":
    compare_history_data()